package web.filter;

import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * 登录相关的过滤
 * 需求：
 * 	1. 访问day18_case案例的资源。验证其是否登录
 * 	3. 如果登录了，则直接放行。
 * 	4. 如果没有登录，则跳转到登录页面，提示"您尚未登录，请先登录"。
 */
@WebFilter("/*")
@SuppressWarnings({"all"})
public class LoginFilter implements Filter {
    public void init(FilterConfig config) throws ServletException {
    }

    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
        //1.强制类型转换
        HttpServletRequest request = (HttpServletRequest)req;
        //2.获取资源请求路径
        String uri  = request.getRequestURI();
        //3.判断是否包含登录相关资源,注意要包含所有关于登录相关的资源  包含css/js/图片等
        if(uri.contains("/login.jsp") || uri.contains("/login.html")  || uri.contains("/") || uri.contains("/css/") || uri.endsWith(".css") || uri.contains("/js")|| uri.endsWith(".js") || uri.contains("/fonts/") || uri.contains("/checkCodeServlet") || uri.endsWith(".ico")|| uri.endsWith(".jsp")|| uri.endsWith(".html")){
            //包含。用户就是想登录，放行
            chain.doFilter(request, res);
        }else{
            //不包含，需要验证用户是否登录
            Object admin = request.getSession().getAttribute("admin");
            if(admin != null){
                //已登录,放行
                chain.doFilter(request, res);
            }else{
                //没有登录,跳转登录页面
                request.setAttribute("login_msg","您尚未登录,请登录！");
                request.getRequestDispatcher("/login.jsp").forward(request,res);
            }
        }
    }
}
